home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 January / macformat-020.iso / Shareware City / Developers / Synthesizer Source / Synthesizer Folder / Level 0 Macintosh 20Jul94 / FloatingPoint.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-01  |  3.2 KB  |  175 lines  |  [TEXT/KAHL]

  1. /* FloatingPoint.c */
  2. /*****************************************************************************/
  3. /*                                                                           */
  4. /*    System Dependency Library for Building Portable Software               */
  5. /*    Macintosh Version                                                      */
  6. /*    Written by Thomas R. Lawrence, 1993 - 1994.                            */
  7. /*                                                                           */
  8. /*    This file is Public Domain; it may be used for any purpose whatsoever  */
  9. /*    without restriction.                                                   */
  10. /*                                                                           */
  11. /*    This package is distributed in the hope that it will be useful,        */
  12. /*    but WITHOUT ANY WARRANTY; without even the implied warranty of         */
  13. /*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                   */
  14. /*                                                                           */
  15. /*    Thomas R. Lawrence can be reached at tomlaw@world.std.com.             */
  16. /*                                                                           */
  17. /*****************************************************************************/
  18.  
  19. #include "MiscInfo.h"
  20. #include "Debug.h"
  21. #include "Audit.h"
  22. #include "Definitions.h"
  23.  
  24. #pragma options(pack_enums)
  25. #include <SANE.h>
  26. #pragma options(!pack_enums)
  27.  
  28. #include "FloatingPoint.h"
  29.  
  30.  
  31. long double                XGETPI(void)
  32.     {
  33.         extended            A;
  34.         long double        B;
  35.  
  36.         A = pi();
  37.         x80tox96(&A,&B);
  38.         return B;
  39.     }
  40.  
  41.  
  42. long double                XATAN(long double X)
  43.     {
  44.         extended            A;
  45.         long double        B;
  46.  
  47.         x96tox80(&X,&A);
  48.         A = atan(A);
  49.         x80tox96(&A,&B);
  50.         return B;
  51.     }
  52.  
  53.  
  54. long double                XCOS(long double X)
  55.     {
  56.         extended            A;
  57.         long double        B;
  58.  
  59.         x96tox80(&X,&A);
  60.         A = cos(A);
  61.         x80tox96(&A,&B);
  62.         return B;
  63.     }
  64.  
  65.  
  66. long double                XEXP(long double X)
  67.     {
  68.         extended            A;
  69.         long double        B;
  70.  
  71.         x96tox80(&X,&A);
  72.         A = exp(A);
  73.         x80tox96(&A,&B);
  74.         return B;
  75.     }
  76.  
  77.  
  78. long double                XFABS(long double X)
  79.     {
  80.         extended            A;
  81.         long double        B;
  82.  
  83.         x96tox80(&X,&A);
  84.         A = fabs(A);
  85.         x80tox96(&A,&B);
  86.         return B;
  87.     }
  88.  
  89.  
  90. long double                XLN(long double X)
  91.     {
  92.         extended            A;
  93.         long double        B;
  94.  
  95.         x96tox80(&X,&A);
  96.         A = log(A);
  97.         x80tox96(&A,&B);
  98.         return B;
  99.     }
  100.  
  101.  
  102. long double                XSIN(long double X)
  103.     {
  104.         extended            A;
  105.         long double        B;
  106.  
  107.         x96tox80(&X,&A);
  108.         A = sin(A);
  109.         x80tox96(&A,&B);
  110.         return B;
  111.     }
  112.  
  113.  
  114. long double                XSQRT(long double X)
  115.     {
  116.         extended            A;
  117.         long double        B;
  118.  
  119.         x96tox80(&X,&A);
  120.         A = sqrt(A);
  121.         x80tox96(&A,&B);
  122.         return B;
  123.     }
  124.  
  125.  
  126. long double                XTAN(long double X)
  127.     {
  128.         extended            A;
  129.         long double        B;
  130.  
  131.         x96tox80(&X,&A);
  132.         A = tan(A);
  133.         x80tox96(&A,&B);
  134.         return B;
  135.     }
  136.  
  137.  
  138. long double                XPOWER(long double X, long double Y)
  139.     {
  140.         extended            XX;
  141.         extended            YY;
  142.         extended            ZZ;
  143.         long double        Z;
  144.  
  145.         x96tox80(&X,&XX);
  146.         x96tox80(&Y,&YY);
  147.         ZZ = power(XX,YY);
  148.         x80tox96(&ZZ,&Z);
  149.         return Z;
  150.     }
  151.  
  152.  
  153. long double                XACOS(long double X)
  154.     {
  155.         return 2 * XATAN(XSQRT((1 - X) / (1 + X)));
  156.     }
  157.  
  158.  
  159. long double                XASIN(long double X)
  160.     {
  161.         long double        Y;
  162.  
  163.         Y = XFABS(X);
  164.         if (Y > 0.5)
  165.             {
  166.                 Y = 1 - Y;
  167.                 Y = 2 * Y - Y * Y;
  168.             }
  169.          else
  170.             {
  171.                 Y = 1 - Y * Y;
  172.             }
  173.         return XATAN(X / XSQRT(Y));
  174.     }
  175.